package com.share.one;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
	
	public static void main(String[] args) throws Exception {
		//1、建立ConnectionFactory工厂，需要用户名、密码、连接地址（默认地址：tcp://localhost:61616）
//		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
//				ActiveMQConnectionFactory.DEFAULT_USER, 
//				ActiveMQConnectionFactory.DEFAULT_PASSWORD, 
//				"tcp://localhost:61616");
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
				"sunxj", 
				"123123", 
				"tcp://localhost:61616");
		//2、通过ConnectionFactory建立一个Connection连接，并且调用Connection的start()开启连接，Connection默认是关闭的
		Connection connection = connectionFactory.createConnection();
		connection.start();
		//3、通过Connection建立Session（单线程上下文环境对象），用于接收消息
		// arg1:是否启动事务
		// arg2:签收模式，一般为自动签收
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//4、通过Session建立Destination对象，指定一个客户端用来指定生产消息目标和消费消息来源的对象，
		// PTP模式：Destination为Queue（队列）
		// Pub/Sub:Destination为Topic（主题）
		// 程序中可以使用多个Queue和Topic
		Destination destination = session.createQueue("queue1");
		//5、通过Session创建生产者和消费者（MessageProducer/MessageConsumer）
		MessageProducer messageProducer = session.createProducer(destination);
		//6、可以使用MessageProducer的setDeliveryMode()为其设置持久化特性和非持久化特性
		// 注：重启activemq.bat之后，queue中的数据是否还存在
		messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
		//7、最后使用JMS规范的通过Session创建TextMessage形式数据。
		// 使用MessageProducer.send()发送数据
		// 使用MessageConsumer.receive()接收数据
		
		for (int i = 0; i < 5; i++) {
			TextMessage textMessage = session.createTextMessage();
			textMessage.setText("我是message" + i);
			messageProducer.send(textMessage);
			System.out.println("生产者： " + textMessage.getText());
		}
		
		if (connection != null) {
			connection.close();
		}
		
	}

}
